package com.processinformation.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.processinformation.base.util.ConvertUtil;
import com.processinformation.base.util.EncryptUtil;
import com.processinformation.entity.system.SysUserEntity;
import com.processinformation.service.LoginService;

@Controller
@Qualifier("loginController")
public class LoginController {
	private final String viewNamespace="login/";
	
	
	//这是spring提供的AOC功能写法，Autowired是自动装配的意思，Qualifier相当于为实例匹配别名，因为我在service层这个类给它设置了别名，这个属性用于同一类型的
	//多个实例区分。这个写法，相当于LoginService loginService = new LoginServiceImpl();，只是该过程spring帮我们做了。
	@Autowired
	@Qualifier("loginService")
	private LoginService loginService;
	
	@RequestMapping("/login.html")
	public ModelAndView loginPage(ModelAndView mv,HttpServletRequest request,HttpServletResponse response)
	{
		mv.setViewName(viewNamespace+"login");
		return mv;
	}
	
	//RequestMapping代表一个接收请求的地址，该注解有很多参数，这里只写了最基础的用法。详细的可以去百度一下(￣▽￣)"
	//例如，该方法的访问url为http://localhost:8080/ProcessInformation-web/doLogin.html?loginName=monkeyan&pwd=anlupwd，记得开调试
	@RequestMapping("/doLogin.html")
	//ModelAndView是springMVC提供的对象向视图转化的对象，HttpServletRequest是来自servlet的请求对象，相应的HttpServletResponse是响应对象
	public ModelAndView doLogin(ModelAndView mv,HttpServletRequest request,HttpServletResponse response)
	{
		//这里其实需要做很多登录的事情，为了演示代码我就不写那么复杂了，只写一个接收登陆请求并判断的逻辑
		
		//从请求中获取参数，这是其中一种方法，最原始但也最好理解的方法
		String loginName=ConvertUtil.toString(request.getParameter("loginName"),"");
		String pwd=ConvertUtil.toString(request.getParameter("pwd"),"");
		
		//将用户前台页面传过来的密码加密，获取密文，因为我们数据库里存的是密文，所以要用密文去对比是否密码正确
		pwd=EncryptUtil.encryptDes(pwd);
		
		//将参数传给service层方法，去拿符合条件的用户，如果拿不到，说明用户名或密码不正确，给出提示，如果拿到，说明登录成功，
		//应该写cookie等其他的操作，这里我就不写了，直接跳转至登陆后的首页
		SysUserEntity user=loginService.getUserByLoginNameAndPwd(loginName, pwd);
		
		if(user==null)
		{
			//这里的设置viewname和web层的WEB-INF中的view文件夹下的文件对应。后缀或前缀在calsspath下的dispatcherServlet-servlet.xml中节点viewResolver设置
			mv.setViewName("login/loginErrorView");
			
			mv.addObject("errorMsg", "用户名密码错误");
		}
		else
		{
			mv.setViewName("indexView");
			mv.addObject("sysUser", user);
		}
		return mv;
	}
}